#include "app_local_time.h"

/*************************define***************************************/
local_time sync_time;
/*************************extern***************************************/
//extern config dev_config;//设备参数
extern time_t ntp_sync_to_rtc(const char *host_name);
//extern struct rt_semaphore sem_net_available;
/*************************rt_thread***************************************/
struct rt_thread local_time_thread;
/*************************rt_stack****************************************/
ALIGN(RT_ALIGN_SIZE)
static rt_uint8_t rt_local_time_thread_stack[2048];
/*******************************************************************************
* Function Name  : local_time_thread_entry
* Description    : 同步实时时间线程
* Input          : const char*
* Return         : None
* Attention		   : None
*******************************************************************************/
void local_time_thread_entry(void* parameter)
{
	rt_uint32_t idx = 0;
	time_t cur_time;
	struct tm *info;
	char local_time[80] = {0};
	while(1)
	{
		if(sync_time.enable == RT_TRUE)
		{
			//rt_sem_take(&sem_net_available,RT_WAITING_FOREVER);
			cur_time = ntp_sync_to_rtc(0);
			//rt_sem_release(&sem_net_available);
			if (cur_time)
			{
				sync_time.sync_success = RT_TRUE;
			}
			else
			{
				sync_time.sync_success = RT_FALSE;
			}
			
//			cur_time = time(RT_NULL);
//			info = localtime(&cur_time);//timer 的值被分解为 tm 结构，并用本地时区表示。
//			strftime(local_time, 80, "%Y-%m-%d %H:%M:%S",info);
//			rt_kprintf("%s\n",local_time);
			if(sync_time.sync_success == RT_TRUE)//如果同步成功
			{
				for(idx = 0;idx < 3600;idx++)//一个小时同步一次
				{
					rt_thread_mdelay(1000);
				}
			}
		}
		rt_thread_mdelay(100);
	}
}
/*******************************************************************************
* Function Name  : app_init_local_time
* Description    : 初始化实时时间
* Input          : const char*
* Return         : None
* Attention		   : None
*******************************************************************************/
int app_init_local_time(void)
{
	 //静态线程 - 实时时间
    rt_thread_init(&local_time_thread,              
                   "local_time",                        	 
                   local_time_thread_entry,           	
                   RT_NULL,                     		  	
                   &rt_local_time_thread_stack[0],       
                   sizeof(rt_local_time_thread_stack),  
                   local_time_pro,    								 
                   20);                         		  
    rt_thread_startup(&local_time_thread);
									 
		return RT_EOK;
}
INIT_APP_EXPORT(app_init_local_time);


